Redéfinition (override) de méthodes

Certaines méthodes peuvent être redéfinies par des méthodes personnalisées. Pour qu’une méthode puisse être redéfinie, elle doit impérativement être déclarée avec l’attribut virtual.

Redéfinition

Prenons l’exemple de la méthode déclenchée lors de la consommation d’alcool par un joueur :

public virtual void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }

La redéfinition est plus simple qu’un abonnement à une action car la correspondance des paramètres est déjà indiquée dans la fonction de base.

Type de paramètre Correspondance
player Le joueur qui consomme de l’alcool
itemId L’identifiant de l’objet consommé
alcoholValue La quantité d’alcool consommée

Il ne nous reste plus qu’à créer la même fonction, avec le même nom et les mêmes paramètres, et à lui appliquer l’attribut override :

public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue) { }

Grâce à override, cette nouvelle fonction remplacera celle définie dans la classe de base, et l’ancienne version ne sera plus exécutée.

Exécution de la méthode de base

Si vous souhaitez que la méthode originale s’exécute en complément, vous devez appeler explicitement la méthode de base avec :

base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);

Cela permet de conserver le comportement défini dans la classe parente avant ou après l’exécution du code personnalisé.

Exemple

public override void OnPlayerConsumeAlcohol(Player player, int itemId, float alcoholValue)
{
    Debug.Log("Ce message apparaît avant l'exécution de la méthode de base");
    base.OnPlayerConsumeAlcohol(player, itemId, alcoholValue);
    Debug.Log("Ce message apparaît après l'exécution de la méthode de base");
}

Dans cet exemple :

  1. Le premier Debug.Log s’affichera en premier
  2. La méthode de base OnPlayerConsumeAlcohol sera exécutée
  3. Le deuxième Debug.Log s’affichera en dernier